package com.fengwei.service;

import com.fengwei.config.CommonProperty;
import com.fengwei.dao.MdmsVerMapper;
import com.fengwei.form.MdmsVer;
import com.fengwei.util.MdmsConsts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class InitVerService {
    @Autowired
    private CommonProperty commonProperty;

    @Autowired
    private MdmsVerMapper mdmsVerMapper;

    public void initVer() {
        /**1、取得数据库存储的版本，是运行的之前一个版本**/
        MdmsVer mdmsVer = mdmsVerMapper.selectByPrimaryKey(null);
        if (null == mdmsVer) {
            //如果是空的，则默认空版本是V1.0.4
            Map mapInsert = new HashMap(1);
            mapInsert.put("ver", MdmsConsts.VER_V_1_0_4);
            mdmsVerMapper.insert(mapInsert);
            commonProperty.setVer(MdmsConsts.VER_V_1_0_4);
        } else {
            commonProperty.setVer(mdmsVer.getVer());
        }

        /**2、取得配置文件的版本，是程序包的对应的最新版本**/
        String msgVerNew = MdmsConsts.CUR_VER;
        if (msgVerNew.startsWith(commonProperty.getVer())) {
            //版本号一致，不用管
        } else {
            //版本号不一致，则一个版本一个版本升级
            updateToNewVer();
        }
    }

    private void updateToNewVer() {
        if (MdmsConsts.VER_V_1_0_4.equals(commonProperty.getVer())) {
            updateFromVer1_0_4To1_0_5();
        } else if (MdmsConsts.VER_V_1_0_5.equals(commonProperty.getVer())) {
            //这里预留1.0.5到1.0.6SQL版本的升级
            return;
        }
    }

    private void updateFromVer1_0_4To1_0_5() {
        //貌似1.0.4到1.0.5没有其他表结构的变动，所以这里就不用写东西了

        //执行之后都到下面走一圈
        updateAfterOnce(MdmsConsts.VER_V_1_0_5);
    }

    private void updateFromVer1_0_5To1_0_6() {
        //貌似1.0.5到1.0.6后面待补充

        //执行之后都到下面走一圈
        updateAfterOnce(MdmsConsts.VER_V_1_0_6);
    }

    private void updateAfterOnce(String newVer) {
        //更新版本号
        Map mapUpdate = new HashMap(1);
        mapUpdate.put("ver", newVer);
        mdmsVerMapper.update(mapUpdate);

        //变量里面的变为1.0.5
        commonProperty.setVer(newVer);

        //到最后还是要到总控方法去看下是否还要升级的
        updateToNewVer();
    }

}
